InĀ [1]:
from pathlib import Path
from compare import ReferenceComparer, get_last_two_commits

Find commits to compare¶

By default, the notebook compares last two commits(ref1hash is the older one and ref2hash is the newer one). You can customise this by changing the ref1_hash and ref2_hash variables or by providing REF1_HASH and REF2_HASH commit values. You can also provide custom spectrum paths for the two hashes with respect to the root directory for that commit.

InĀ [2]:
import os

ref1_hash = os.getenv('REF1_HASH')
ref2_hash = os.getenv('REF2_HASH')

if not (ref1_hash and ref2_hash):
    ref1_hash, ref2_hash = get_last_two_commits()

if not (ref1_hash and ref2_hash):
    raise ValueError("Could not get commit hashes.")
    

if os.getenv('CUSTOM_REF1_SPECTRUM_PATH'):
    custom_ref1_spectrum_path = os.getenv('CUSTOM_REF1_SPECTRUM_PATH')
else:
    custom_ref1_spectrum_path = 'tardis/spectrum/tests/test_spectrum_solver/test_spectrum_solver/TestSpectrumSolver.h5'

if os.getenv('CUSTOM_REF2_SPECTRUM_PATH'):
    custom_ref2_spectrum_path = os.getenv('CUSTOM_REF2_SPECTRUM_PATH')
else:
    custom_ref2_spectrum_path = 'tardis/spectrum/tests/test_spectrum_solver/test_spectrum_solver/TestSpectrumSolver.h5'
InĀ [3]:
ref1_hash, ref2_hash
Out[3]:
('b2fdf418ac1a3631f8c3d2a5f392b6ebfa09ba0b',
 '52b3e80aa534cfbab5dabdbcf7963fe951f7e84c')

Example Values¶

Below are example values you can test the notebook with.

InĀ [4]:
# ref1_hash="170f1a2c0d8c6db518a4b9a0f4cb9b657aaa61b6"
# ref2_hash="d9fd3bb659d185bd9ece10b8e2175cf497ea84c5"
# custom_ref1_spectrum_path = 'tardis/spectrum/tests/test_spectrum_solver/test_spectrum_solver/TestSpectrumSolver.h5'
# custom_ref2_spectrum_path = 'test_spectrum_solver/test_spectrum_solver/TestSpectrumSolver.h5'

Initialise the ReferenceComparer class¶

InĀ [5]:
comparer = ReferenceComparer(ref1_hash=ref1_hash, ref2_hash=ref2_hash, print_path=True)

comparer.setup()
comparer.diff_analyzer.display_diff_tree(comparer.dcmp)
Created temporary directory at /tmp/ref_compare_1mx0z5f6
ā”œ .github/
│ ā”œ actions/
│ │ ā”œ setup_env/
│ ā”œ workflows/
ā”œ arepo_data/
ā”œ atom_data/
│ ā”œ nlte_atom_data/
│ ā”œ stardis_atom_data/
ā”œ tardis/
│ ā”œ opacities/
│ │ ā”œ tests/
│ │ │ ā”œ test_tau_sobolev/
│ ā”œ plasma/
│ │ ā”œ equilibrium/
│ │ │ ā”œ tests/
│ │ │ │ ā”œ test_level_populations/
│ │ │ │ │ ā”œ test_level_population_solver/
│ │ │ │ ā”œ test_rate_matrix/
│ │ ā”œ tests/
│ │ │ ā”œ test_complete_plasmas/
│ │ │ │ ā”œ test_plasma/
│ │ │ ā”œ test_hdf_plasma/
│ │ │ ā”œ test_nlte_excitation/
│ │ │ ā”œ test_nlte_solver/
│ │ │ ā”œ test_plasma_continuum/
│ │ │ ā”œ test_tardis_model_density_config/
│ ā”œ simulation/
│ │ ā”œ tests/
│ │ │ ā”œ test_simulation/
│ ā”œ spectrum/
│ │ ā”œ tests/
│ │ │ ā”œ test_spectrum_solver/
│ │ │ │ ā”œ test_spectrum_solver/
│ ā”œ tests/
│ │ ā”œ test_tardis_full/
│ │ │ ā”œ test_transport_simple/
│ │ ā”œ test_tardis_full_formal_integral/
│ │ │ ā”œ test_transport_simple_formal_integral/
│ ā”œ transport/
│ │ ā”œ montecarlo/
│ │ │ ā”œ tests/
│ │ │ │ ā”œ test_continuum/
│ │ │ │ │ ✱ test_montecarlo_continuum.h5
│ │ │ │ ā”œ test_montecarlo_main_loop/
│ │ │ │ ā”œ test_packet_source/
│ │ │ │ │ ā”œ test_black_body_simple_source/
│ │ │ │ │ ā”œ test_black_body_simple_source_rel/
│ │ │ │ ā”œ test_rpacket_tracker/
│ │ │ │ ā”œ test_weighted_packet_source/
│ │ │ │ │ ā”œ test_black_body_weighted_source/
│ ā”œ visualization/
│ │ ā”œ tools/
│ │ │ ā”œ tests/
│ │ │ │ ā”œ test_liv_plot/
│ │ │ │ │ ā”œ test_liv_plotter/
│ │ │ │ ā”œ test_sdec_plot/
│ │ │ │ │ ā”œ test_sdec_plotter/
InĀ [6]:
comparer.compare()
Error comparing item: /simulation/plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /simulation/plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /data
No module named 'numpy._core.numeric'
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/lines_lower_level_index
Maximum relative difference: 9.96e-01 (Versions differ by 9.96e+01%)
Displaying heatmap for key /simulation/plasma/lines_lower_level_index in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 1.1e+03
max 2.2e+03
Visualising Relative Differences
Ā  0
mean 0.5
max 1
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/level2continuum_idx
Maximum relative difference: 1.64e-03 (Versions differ by 1.64e-01%)
Error comparing item: /simulation/plasma/yg_interp
No module named 'numpy._core.numeric'
Displaying heatmap for key /simulation/plasma/level2continuum_idx in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 0.52
max 1
Visualising Relative Differences
Ā  0
mean 0.00084
max 0.0016
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Error comparing item: /simulation/plasma/determine_continuum_macro_activation_idx
unsupported operand type(s) for -: 'CPUDispatcher' and 'CPUDispatcher'
Displaying heatmap for key /simulation/plasma/f_lu in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 0
max 0
Visualising Relative Differences
Ā  0
mean 0
max 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
/home/runner/work/tardis/tardis/tardis-regression-data/compare.py:180: RuntimeWarning:

The values in the array are unorderable. Pass `sort=False` to suppress this warning.

/home/runner/work/tardis/tardis/tardis-regression-data/compare.py:180: RuntimeWarning:

The values in the array are unorderable. Pass `sort=False` to suppress this warning.

/home/runner/work/tardis/tardis/tardis-regression-data/compare.py:216: RuntimeWarning:

The values in the array are unorderable. Pass `sort=False` to suppress this warning.

/home/runner/work/tardis/tardis/tardis-regression-data/compare.py:217: RuntimeWarning:

The values in the array are unorderable. Pass `sort=False` to suppress this warning.

/home/runner/work/tardis/tardis/tardis-regression-data/compare.py:217: RuntimeWarning:

The values in the array are unorderable. Pass `sort=False` to suppress this warning.

Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/level_idxs2transition_idx
Maximum relative difference: 2.17e-02 (Versions differ by 2.17e+00%)
Displaying heatmap for key /simulation/plasma/level_idxs2transition_idx in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  lines_idx transition_type
mean 0.14 0
max 21 0
Visualising Relative Differences
Ā  lines_idx transition_type
mean 3.9e-06 0
max 0.022 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/j_blues in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0 1 2 3 4
mean 0 0 0 0 0
max 0 0 0 0 0
Visualising Relative Differences
Ā  0 1 2 3 4
mean 0 0 0 0 0
max 0 0 0 0 0
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/deactivation_channel_probs
Maximum relative difference: 1.64e-03 (Versions differ by 1.64e-01%)
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/deactivation_channel_probs in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  lines_idx transition_type 0 1 2 3 4
mean 0.08 0 0 0 0 0 0
max 20 0 0 0 0 0 0
Visualising Relative Differences
Ā  lines_idx transition_type 0 1 2 3 4
mean 3.5e-06 0 0 0 0 0 0
max 0.0016 0 0 0 0 0 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Error comparing item: /simulation/plasma/determine_bf_macro_activation_idx
unsupported operand type(s) for -: 'CPUDispatcher' and 'CPUDispatcher'
Displaying heatmap for key /simulation/plasma/tau_sobolevs in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0 1 2 3 4
mean 0 0 0 0 0
max 0 0 0 0 0
Visualising Relative Differences
Ā  0 1 2 3 4
mean 0 0 0 0 0
max 0 0 0 0 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/wavelength_cm in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 0
max 0
Visualising Relative Differences
Ā  0
mean 0
max 0
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/p_fb_deactivation
Maximum relative difference: 3.35e-01 (Versions differ by 3.35e+01%)
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/p_fb_deactivation in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0 1 2 3 4
mean 2.4e-10 1.7e-10 8.2e-11 3.4e-11 1.4e-11
max 1e-08 6.9e-09 3.4e-09 1.4e-09 5.7e-10
Visualising Relative Differences
Ā  0 1 2 3 4
mean 0.0051 0.0051 0.0051 0.0051 0.0051
max 0.33 0.33 0.33 0.33 0.33
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Error comparing item: /simulation/plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/non_continuum_trans_probs
Maximum relative difference: 2.17e-02 (Versions differ by 2.17e+00%)
Displaying heatmap for key /simulation/plasma/non_continuum_trans_probs in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  lines_idx transition_type 0 1 2 3 4
mean 0.23 0 0 0 0 0 0
max 21 0 0 0 0 0 0
Visualising Relative Differences
Ā  lines_idx transition_type 0 1 2 3 4
mean 6e-06 0 0 0 0 0 0
max 0.022 0 0 0 0 0 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/level_idxs2line_idx
Maximum relative difference: 2.17e-02 (Versions differ by 2.17e+00%)
Displaying heatmap for key /simulation/plasma/level_idxs2line_idx in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 11
max 21
Visualising Relative Differences
Ā  0
mean 0.011
max 0.022
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/lines_upper_level_index
Maximum relative difference: 9.95e-01 (Versions differ by 9.95e+01%)
Displaying heatmap for key /simulation/plasma/lines_upper_level_index in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 1.1e+03
max 2.2e+03
Visualising Relative Differences
Ā  0
mean 0.5
max 1
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/macro_atom_data
Maximum relative difference: 2.17e-02 (Versions differ by 2.17e+00%)
Displaying heatmap for key /simulation/plasma/macro_atom_data in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  source_level_idx destination_level_idx transition_type lines_idx
mean 0 0 0 0.019
max 0 0 0 21
Visualising Relative Differences
Ā  source_level_idx destination_level_idx transition_type lines_idx
mean 0 0 0 5.6e-07
max 0 0 0 0.022
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/beta_sobolev in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0 1 2 3 4
mean 0 0 0 0 0
max 0 0 0 0 0
Visualising Relative Differences
Ā  0 1 2 3 4
mean 0 0 0 0 0
max 0 0 0 0 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/lines in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  line_id wavelength f_ul f_lu nu B_lu B_ul A_ul wavelength_cm
mean 0 0 0 0 0 0 0 0 0
max 0 0 0 0 0 0 0 0 0
Visualising Relative Differences
Ā  line_id wavelength f_ul f_lu nu B_lu B_ul A_ul wavelength_cm
mean 0 0 0 0 0 0 0 0 0
max 0 0 0 0 0 0 0 0 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Displaying heatmap for key /simulation/plasma/nu in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0
mean 0
max 0
Visualising Relative Differences
Ā  0
mean 0
max 0
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/level_idxs2continuum_idx
Maximum relative difference: 1.64e-03 (Versions differ by 1.64e-01%)
Displaying heatmap for key /simulation/plasma/level_idxs2continuum_idx in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  continuum_idx
mean 0.035
max 1
Visualising Relative Differences
Ā  continuum_idx
mean 4.4e-05
max 0.0016
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
Significant difference detected in test_montecarlo_continuum.h5, key=/simulation/plasma/stimulated_emission_factor
Maximum relative difference: 1.00e+00 (Versions differ by 1.00e+02%)
Error comparing item: /simulation/plasma/get_current_bound_free_continua
unsupported operand type(s) for -: 'CPUDispatcher' and 'CPUDispatcher'
Displaying heatmap for key /simulation/plasma/stimulated_emission_factor in file test_montecarlo_continuum.h5 
Visualising Absolute Differences
Ā  0 1 2 3 4
mean 2.9e-05 2.9e-05 2.9e-05 2.9e-05 2.9e-05
max 1 1 1 1 1
Visualising Relative Differences
Ā  0 1 2 3 4
mean 3.6e-05 3.6e-05 3.6e-05 3.6e-05 3.6e-05
max 1 1 1 1 1
Path1: /tmp/ref_compare_1mx0z5f6/ref1/tardis/transport/montecarlo/tests/test_continuum
Path2: /tmp/ref_compare_1mx0z5f6/ref2/tardis/transport/montecarlo/tests/test_continuum
==================================================
Summary for test_montecarlo_continuum.h5:
Total number of keys- in ref1: 148, in ref2: 148
Number of keys with different names in ref1 and ref2: 0
Number of keys with same name but different data in ref1 and ref2: 21
Number of totally same keys: 125
==================================================

Error comparing item: /simulation/plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'
Error comparing item: /simulation/plasma/dilute_planckian_radiation_field
No module named 'tardis.plasma.radiation_field'

Testing individual files¶

You can compare individual files too. Below example would work if you used example commits.

InĀ [7]:
# comparer.hdf_comparator.summarise_changes_hdf("test_generate_plot_ply__plotter_generate_plot_ply1__.h5",
#                                              Path(comparer.ref1_path) / "tardis/visualization/tools/tests/test_liv_plot/test_liv_plotter",
#                                              Path(comparer.ref2_path) / "tardis/visualization/tools/tests/test_liv_plot/test_liv_plotter"
#                                              )

HDF File Comparison¶

Below graph visualises all the HDF files that changed. Each block represents a key that changed, hovering on that block would show relative percentage change for that key.

InĀ [8]:
fig_same_name = comparer.generate_graph("different keys same name")
fig_different_keys = comparer.generate_graph("different keys")
Generating graph with updated hovertemplate
Saved plot to comparison_plots_52b3e8_new_b2fdf4_old/same_name_diff.png
Generating graph with updated hovertemplate
InĀ [9]:
fig_different_keys
InĀ [10]:
fig_same_name.layout.width = 1000
fig_same_name

Spectrum Comparison¶

You can compare TARDIS spectra for the two commits and also provide a custom path for the spectra.

InĀ [11]:
comparer.compare_testspectrumsolver_hdf(
    custom_ref1_path=Path(comparer.ref1_path) / custom_ref1_spectrum_path, 
    custom_ref2_path=Path(comparer.ref2_path) / custom_ref2_spectrum_path
)
/home/runner/work/tardis/tardis/tardis-regression-data/compare.py:332: UserWarning:

This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.

Saved spectrum plot to comparison_plots_52b3e8_new_b2fdf4_old/spectrum.png
No description has been provided for this image
InĀ [12]:
comparer.teardown()
Removed temporary directory /tmp/ref_compare_1mx0z5f6